문자열 포매팅(Formatting)
✒️ 2025-05-19 10:32 내용 수정
Do it! 점프 투 파이썬(2017년 발행) 내용을 정리
문자열 안에 어떤 값을 삽입하는 방법
- 문자열 안에 숫자, 문자열, 변수 등을 넣을 수 있다.
| 코드 | 타입 |
|---|---|
%s |
문자열(String) |
%c |
문자(char) |
%d |
정수(Integer) |
%f |
실수/부동소수(Float) |
%o |
8진수(Oct) |
%x |
16진수(Hex) |
| `" % 95 | |
| 'Progress : 95%' |
- **2개 이상의 값을 바로 대입할 때는 `(,)`로 구분**하여 넣는다.
```python
>>> "%d %s apples" % (5, "red")
'5 red apples'
- 변수에 입력할 값을 지정한 후에 문자열 포매팅을 할 수 있다.
>>> number = 10
>>> "%d minutes left." % number
'10 minutes left.'
- 포맷 코드와 숫자를 결합하면 공백을 함께 추가할 수 있다.
%10s: 전체 문자열 길이를 10개인 공간에서 대입할 값을 오른쪽에 정렬하고, 남는 자리가 있다면 공백으로 채운다.
"""
5개 길이 중 3글자를 제외하고
왼쪽에 공백 2개가 추가
"""
>>> "This is the %5s" % "end"
'This is the end'
"""
5개 길이 중 3글자를 제외하고
오른쪽에 공백 4개가 추가
"""
>>> "This is the %-7s." % "end"
'This is the end .'
"""
삽입할 문자열 길이가 숫자보다 크면
공백 없이 문자열 전체를 넣는다
"""
>>> "This is the %5s" % "end of the road"
'This is the end of the road'
- 포맷 코드와 숫자의 조합으로 소수점 자릿수 표현에도 사용할 수 있다.
%.3f: 소수점 3자리로 표현%10.5f: 문자열 전체 길이를 10개로 하고, 소수점 자리를 5자리까지 표현한 후 남은 자리는 공백으로 채운다.
>>> "%0.3f" % 3.141592
'3.142'
>>> "%10.5f" % 3.1415926535897932
' 3.14159'
2. 포맷 함수 사용
format()함수를 사용하여 문자열 포매팅을 할 수 있다.문자열.format(값)으로 작성한다.- 문자열 내에 이전처럼 포맷 코드를 넣어도 작동하나,
{0}을 사용하면 자료형에 맞춰 자동으로 포매팅된다.
>>> "It costs %d dollars".format(100)
'It costs %d dollars'
>>> "It costs {0} dollars".format(100)
'It costs 100 dollars'
>>> "Five {0} apples".format("golden")
'Five golden apples'
>>> "Progress : {0}%".format(95)
'Progress : 95%'
format()함수 사용 시{나}을 그대로 쓰고 싶을 때{{나}}로 사용한다.
>>> "{{ and }}".format()
'{ and }'
- 변수에 값을 대입한 후 포매팅할 때도
format(변수)로 입력하여 사용한다.
>>> number = 5
>>> "{0} red apples".format(number)
'5 red apples'
- 여러 개의 값을 넣을 때
format(val1, val2, ...)로 입력하며, 문자열에서{0} {1} {2}로format()의 입력 값의 인덱스를 지정하여 넣을 수 있다.
>>> number = 5
>>> "{0} {1} apples".format(number,"red")
'5 red apples'
>>> "{1} {0} apples".format(number,"red")
'red 5 apples'
{0}인덱스 항목 대신{name}형태를 사용하여format(name=value)를 지정하면 더 쉽게 값을 포매팅할 수 있다.- 예시를 보면 인덱스를 사용했을 때는 포매팅할 값의 순서를
format()내에서도 맞춰야 했던 반면,{name}형식을 사용하면 순서에 무관하다.
- 예시를 보면 인덱스를 사용했을 때는 포매팅할 값의 순서를
>>> "Today is {month}/{date}/{year}".format(year=2025, month=3, date=28)
'Today is 3/28/2025'
- 인덱스 항목과
{name}형식을 혼용해서 넣는 것도 가능하나, 함수의 매개변수 순서를 지키지 않으면 매개변수 syntax 에러가 생긴다.
# 인덱스 항목으로 넣을 값을 마지막에 배치한 경우
>>> "Today is {month}/{date}/{2}".format(date=10, month=2, 2025)
File "<python-input-67>", line 1
"Today is {month}/{date}/{2}".format(date=10, month=2, 2025)
^
SyntaxError: positional argument follows keyword argument
# 인덱스 항목으로 넣을 값을 맨 처음에 배치
>>> "Today is {month}/{date}/{0}".format(2025, date=10, month=2)
'Today is 2/10/2025'
- 문자열 포매팅(Formatting)#1. 포맷코드와 % 사용과 마찬가지로 치환될 문자열을 정렬하고 총 자릿수를 설정할 수 있다.
:<10: 치환될 문자열을 왼쪽으로 정렬하고, 총 자릿수를 10자리로 맞춤:>10: 치환될 문자열을 오른쪽으로 정렬하고, 총 자릿수를 10자리로 맞춤:^10: 치환될 문자열을 가운데로 정렬하고, 총 자릿수를 10자리로 맞춤:문자^10: 치환될 문자열을 가운데로 정렬하고, 총 자릿수를 10자리로 맞춘 후 빈 공간에문자로 채움
>>> "{0:<10}".format("hello")
'hello '
>>> "{0:>10}".format("test")
' test'
>>> "{0:^10}".format("aaaa")
' aaaa '
>>> "{0:*^10}".format("aaaa")
'***aaaa***'
- 소수점 표현 시에도
:전체자릿수.소수점자릿수f로 표현할 수 있다.
>>> pi = 3.1415926535897932
>>> "{0:0.3f}".format(pi)
'3.142'
>>> "{pi:10.2f}".format(pi=3.14)
' 3.14'
3. f 문자열 포매팅
- Python 3.6 버전 이상에서만 지원하는 기능으로, 문자열 앞에
f접두사를 붙여 사용한다.
>>> number = 10
>>> color = "blue"
>>> f'{number} {color} berries'
'10 blue berries'
- f 문자열 포매팅은 표현식을 지원하여
{}안에서 계산식과 변수를 함께 사용할 수 있다.
>>> hour = 12
>>> f"{hour + 3} hours left."
'15 hours left.'
- 정렬 및 공백을 채울 때에도
{값:<자릿수}형식을 사용한다.
>>> f'{"aa":<8}'
'aa '
>>> f'{"aa":>8}'
' aa'
>>> f'{"aa":^8}'
' aa '
>>> f'{"aa":*^8}'
'***aa***'
- 소수점 표현도
{값:<전체자릿수.소수점자리수f}형식을 사용한다.
>>> pi = 3.141592
>>> f'{pi:5.3f}'
'3.142'
>>> f'{pi:10.3f}'
' 3.142'
- 숫자에 자동으로
,를 추가할 때{숫자:,}를 사용한다.
>>> f"{10298493883:,}"
'10,298,493,883'